Интервальное время
Интервальное время позволяет представить промежуток времени между двумя датами.
Интервальное время может быть двух типов: интервал лет и месяцев и интервал дней, часов, минут и секунд.
Элементы конструкций для вычисления интервального времени могут быть заданы
< SQL-параметром >
, который должен содержать спецификацию типа данных параметра.
Для интервального времени разрешены следующие операции:
-
вычисление интервала времени между значениями типа «дата-время».
a) create or replace table test("Начальная дата" date, "Промежуточная дата" date, "Конечная дата" date); insert into test ("Начальная дата", "Промежуточная дата", "Конечная дата") values (to_date('01.01.2010 12:00:00', 'DD.MM.YYYY HH:MI:SS'), to_date('02.01.2010 08:00:00', 'DD.MM.YYYY HH:MI:SS'), to_date('10.01.2010 18:00:00', 'DD.MM.YYYY HH:MI:SS')); select to_char("Промежуточная дата" - "Конечная дата", 'dd') || ' дней' from test; |08 дней| select to_char("Начальная дата" - "Промежуточная дата", 'hh') || ' часов' from test; |20 часов| select to_char("Начальная дата" - "Конечная дата", '+dd.mm') from test; |-09.01| select to_char("Конечная дата" - "Начальная дата", 'dd') from test; |09| select to_char("Начальная дата" + "Конечная дата", '+dd') from test; |+12| select to_char("Промежуточная дата" + "Начальная дата", 'dd.mi.ss') from test; |03.00.00| b) select to_char(:current_date (date) + :start_date (date), 'dd.mm.yyyy'); 01.01.2015 01.03.2014 |01.03.4028|
-
сложение/вычитание интервалов времени с числовыми значениями и интервалами времени.
a) select to_char(("Промежуточная дата" - "Начальная дата") + ("Конечная дата" - "Промежуточная дата"), 'dd') from test; |09| b) Блокада Ленинграда длилась с 8 сентября 1941 года 872 дня. Узнать, когда она закончилась. select 'Снятие блокады Ленинграда ' || to_char((to_date('08.09.1941', 'dd.mm.yyyy') + 872), 'dd.mm.yyyy'); |Снятие блокады Ленинграда 28.01.1944| c) select to_char(:current_date (date) + ? (int),'dd.mm.yyyy'); 01.01.2015 200 |20.07.2015|
-
умножение/деление интервалов времени на числовое значение и на интервал времени.
a) Пятилетку – досрочно, за 4 года и 2 месяца (начало пятилетки '01.01.1980', завершение по плану '31.12.1984') select 'Завершим пятилетку досрочно, за 4 года и 2 месяца, к ' || to_char(to_date('01.01.1980', 'dd.mm.yyyy') + (to_date ('31.12.1984', 'dd.mm.yyyy') - to_date ('01.01.1980', 'dd.mm.yyyy')) * 50/60, 'dd.mm.yyyy'); |Завершим пятилетку досрочно, за 4 года и 2 месяца, к 01.03.1984| Вариант: select 'Завершим пятилетку досрочно, за 4 года и 2 месяца, к ' || to_char(to_date('01.01.1980', 'dd.mm.yyyy') + to_date ('02.04','mm.yy'), 'dd.mm.yyyy'); |Завершим пятилетку досрочно, за 4 года и 2 месяца, к 01.03.1984| b) Отец ребенка родился 25.03.1976, мать 19.09.1980, ребенок 07.12.2006. Во сколько раз больше разница в годах между рождением ребенка и отца (матери)? select round(cast (to_date('25.03.1976', 'dd.mm.yyyy')- to_date('07.12.2006', 'dd.mm.yyyy')) / (to_date('19.09.1980', 'dd.mm.yyyy')- to_date('07.12.2006', 'dd.mm.yyyy')) as decimal,2); | 1.17|
-
указание знака "-" перед значением интервала времени.
select -to_date('01:00', 'HH:MI') + to_date('02:00', 'HH:MI'); |00.00.0000:01:00:00|